#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <vector>
typedef long long ll;
using namespace std;
ll res;
struct node {
    int x;
    int y;
};
const int P=100;
bool map[205][205];
bool boundary(node a) {
    if (a.x<0 || a.x>200 || a.y<0 || a.y>200) return false;
    return true;
}
void check(node a, node b) {
    if (boundary(a) && boundary(b)) {
        if (map[a.x][a.y] && map[b.x][b.y]) res++;
    }
}
int main() {
    int n;
    vector<node> list;
    node tmp;
    while (cin>>n) {
        list.clear();
        memset(map, 0, sizeof(map));
        res=0;
        for (int i=0; i<n; i++) {
            scanf("%d%d", &tmp.x, &tmp.y);
            tmp.x+=P;
            tmp.y+=P;
            list.push_back(tmp);
            map[tmp.x][tmp.y]=true;
        }
        int length=list.size();
        node p1,p2,p3,p4;
        int dis_x,dis_y;
        for (int i=0; i<length; i++) {
            for (int j=0; j<length; j++) {
                if (list[i].x<list[j].x && list[i].y<=list[j].y) {
                    p1=list[i];
                    p2=list[j];
                    dis_y=p2.y-p1.y;
                    dis_x=p2.x-p1.x;
                    p3.x=p2.x-dis_y;
                    p3.y=p2.y+dis_x;
                    p4.x=p1.x-dis_y;
                    p4.y=p1.y+dis_x;
                    check(p3,p4);
                }
            }
        }
        cout<<res<<endl;
    }
    return 0;
}
